library(tibble)
library(readxl)
library(dplyr)
library(gtExtras)
library(ggplot2)
library(plotly)
library(viridis)
library(hrbrthemes)
setwd("C:/Users/felip/Desktop/R/3_analise")
data <- readxl::read_xlsx ("BPAs_FDTs_ RAVLTs_EscoreZ.xlsx", sheet = 1)
data
#gt_plt_summary(data)
####################### BPA ANALYSIS
summary(data)
ID GROUP EDU_LEVEL AGE
Length:117 Length:117 Length:117 Min. :20.00
Class :character Class :character Class :character 1st Qu.:26.00
Mode :character Mode :character Mode :character Median :31.00
Mean :32.91
3rd Qu.:39.00
Max. :49.00
LIMIT_AGE BPA_CONC_POINTS BPA_CONC_EscoreZ BPA_DIVID_POINTS
Length:117 Min. : 44.00 Min. :-2.0037 Min. : 26.00
Class :character 1st Qu.: 80.00 1st Qu.:-0.2828 1st Qu.: 72.00
Mode :character Median : 92.00 Median : 0.3186 Median : 80.00
Mean : 92.15 Mean : 0.3112 Mean : 80.88
3rd Qu.:105.00 3rd Qu.: 0.8875 3rd Qu.: 94.00
Max. :120.00 Max. : 1.7190 Max. :116.00
BPA_DIVID_EscoreZ BPA_ALTERN_POINTS BPA_ALTERN_EscoreZ
Min. :-1.8505 Min. : 50.00 Min. :-1.5930
1st Qu.:-0.1214 1st Qu.: 87.00 1st Qu.: 0.1048
Median : 0.2789 Median : 99.00 Median : 0.6705
Mean : 0.3513 Mean : 97.28 Mean : 0.5853
3rd Qu.: 0.8575 3rd Qu.:110.00 3rd Qu.: 1.1660
Max. : 1.8387 Max. :120.00 Max. : 1.8333
#utils::View(data)
p1 <- data %>% select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL , AGE, BPA_CONC_POINTS , BPA_CONC_EscoreZ )
p2 <- data %>% select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL, AGE, BPA_DIVID_POINTS , BPA_DIVID_EscoreZ )
p3 <- data %>% select(ID,EDU_LEVEL ,GROUP ,EDU_LEVEL ,AGE, BPA_ALTERN_POINTS , BPA_ALTERN_EscoreZ )
#################################### P1
coresBPA <- c("#1a2887", "#799de4")
p1 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", BPA_CONC_POINTS,
"\nZ-Score: ", BPA_CONC_EscoreZ, sep="")) %>%
ggplot(aes(x = AGE, y = BPA_CONC_EscoreZ, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresBPA) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score BPA Focused Attention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p1
pp1 <- ggplotly(p1, tooltip="text")
pp1
################################## P2
p2 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", BPA_DIVID_POINTS,
"\nZ-Score: ", BPA_DIVID_EscoreZ, sep="")) %>%
ggplot(aes(x = AGE, y = BPA_DIVID_EscoreZ, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresBPA) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score BPA Focused Attention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p2
pp2 <- ggplotly(p2, tooltip="text")
pp2
###################################### P3
p3 <- data %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", BPA_ALTERN_POINTS,
"\nZ-Score: ", BPA_ALTERN_EscoreZ, sep="")) %>%
ggplot(aes(x = AGE, y = BPA_ALTERN_EscoreZ, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresBPA) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score BPA Focused Attention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p3
pp3 <- ggplotly(p3, tooltip="text")
pp3
NA
NA
NA
NA
library(tibble)
library(readxl)
library(dplyr)
library(gtExtras)
library(ggplot2)
library(plotly)
library(viridis)
library(hrbrthemes)
setwd("C:/Users/felip/Desktop/R/3_analise")
data <- readxl::read_xlsx ("BPAs_FDTs_ RAVLTs_EscoreZ.xlsx", sheet = 2)
data
####################### FDTs ANALYSIS
p4 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_READING_TIME , FDT_READING_TIME_Z )
p5 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_COUNTING_TIME , FDT_COUNTING_TIME_Z )
p6 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_CHOOSING_TIME , FDT_CHOOSING_TIME_Z )
p7 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_CHANGING_TIME , FDT_CHANGING_TIME_Z )
p8 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_INHIBITION , FDT_INHIBITION_Z )
p9 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, FDT_FLEXIBILITY , FDT_FLEXIBILITY_Z )
######################## P4
coresFDT <- c("#f1948a", "#abebc6")
p4 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_READING_TIME,
"\nZ-Score: ", FDT_READING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_READING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Reading Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p4
pp4 <- ggplotly(p4, tooltip="text")
pp4
####################### P5
p5 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_COUNTING_TIME,
"\nZ-Score: ", FDT_COUNTING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_COUNTING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Counting Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p5
pp5 <- ggplotly(p5, tooltip="text")
pp5
####################### P6
p6 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_CHOOSING_TIME,
"\nZ-Score: ", FDT_CHOOSING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_CHOOSING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Chossing Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p6
pp6 <- ggplotly(p6, tooltip="text")
pp6
####################### P7
p7<- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_CHANGING_TIME,
"\nZ-Score: ", FDT_CHANGING_TIME_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_CHANGING_TIME_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Changing Time", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p7
pp7 <- ggplotly(p7, tooltip="text")
pp7
####################### P8
p8<- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_INHIBITION,
"\nZ-Score: ", FDT_INHIBITION_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_INHIBITION_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Inbition", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p8
pp8 <- ggplotly(p8, tooltip="text")
pp8
####################### P9
p9<- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", FDT_FLEXIBILITY,
"\nZ-Score: ", FDT_FLEXIBILITY_Z, sep="")) %>%
ggplot(aes(x = AGE, y = FDT_FLEXIBILITY_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresFDT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score FDT Flexibility", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p9
pp9 <- ggplotly(p9, tooltip="text")
pp9
library(tibble)
library(readxl)
library(dplyr)
library(gtExtras)
library(ggplot2)
library(plotly)
library(viridis)
library(hrbrthemes)
setwd("C:/Users/felip/Desktop/R/3_analise")
data <- readxl::read_xlsx ("BPAs_FDTs_ RAVLTs_EscoreZ.xlsx", sheet = 3)
data
####################### RAVLTs ANALYSIS
p10 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A1 , RAVLT_A1_Z )
p11 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A2 , RAVLT_A2_Z )
p12 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A3 , RAVLT_A3_Z )
p13 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A4 , RAVLT_A4_Z )
p14 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A5 , RAVLT_A5_Z )
p15 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_B1 , RAVLT_B1_Z )
p16 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A6 , RAVLT_A6_Z )
p17 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_A7 , RAVLT_A7_Z )
p18 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_TOTALSCORE , RAVLT_TOTALSCORE_Z )
p19 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_REC , RAVLT_REC_Z )
p20 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_RETENTION , RAVLT_RETENTION_Z )
p21 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_PROAT_INTERFERENCE , RAVLT_PROAT_INTERFERENCE_Z )
p22 <- data %>% select(ID,EDU_LEVEL ,GROUP ,AGE, RAVLT_RETRO_INTERFERENCE , RAVLT_RETRO_INTERFERENCE_Z )
######################## P10
coresRAVLT<- c("#e59866", "#b2babb")
p10 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A1,
"\nZ-Score: ", RAVLT_A1_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A1_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A1", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p10
pp10 <- ggplotly(p10, tooltip="text")
pp10
######################## P11
p11 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A2,
"\nZ-Score: ", RAVLT_A2_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A2_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A2", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p11
pp11 <- ggplotly(p11, tooltip="text")
pp11
######################## P12
p12 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A3,
"\nZ-Score: ", RAVLT_A3_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A3_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A3", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p12
pp12 <- ggplotly(p12, tooltip="text")
pp12
######################## P13
p13 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A4,
"\nZ-Score: ", RAVLT_A4_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A4_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A4", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p13
pp13 <- ggplotly(p13, tooltip="text")
pp13
######################## P14
p14 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A5,
"\nZ-Score: ", RAVLT_A5_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A5_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A4", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p14
pp14 <- ggplotly(p14, tooltip="text")
pp14
######################## P15
p15 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_B1,
"\nZ-Score: ", RAVLT_B1_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_B1_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT B1", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p15
pp15 <- ggplotly(p15, tooltip="text")
pp15
######################## P16
p16 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A6,
"\nZ-Score: ", RAVLT_A6_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A6_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A6", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p16
pp16 <- ggplotly(p16, tooltip="text")
pp16
######################## P17
p17 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_A7,
"\nZ-Score: ", RAVLT_A7_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_A7_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT A7", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p17
pp17 <- ggplotly(p17, tooltip="text")
pp17
######################## P18
p18 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_TOTALSCORE,
"\nZ-Score: ", RAVLT_TOTALSCORE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_TOTALSCORE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Total Score", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p18
pp18 <- ggplotly(p18, tooltip="text")
pp18
######################## P19
p19 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_TOTALSCORE,
"\nZ-Score: ", RAVLT_TOTALSCORE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_TOTALSCORE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Total Score", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p19
pp19 <- ggplotly(p19, tooltip="text")
pp19
######################## P20
p20 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_RETENTION,
"\nZ-Score: ", RAVLT_RETENTION_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_RETENTION_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Retention", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p20
pp20 <- ggplotly(p20, tooltip="text")
pp20
######################## P21
p21 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_PROAT_INTERFERENCE,
"\nZ-Score: ", RAVLT_PROAT_INTERFERENCE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_PROAT_INTERFERENCE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Proative Interference", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p21
pp21 <- ggplotly(p21, tooltip="text")
pp21
######################## P22
p22 <- data %>%
arrange(ID) %>%
mutate(text = paste("Identification: ", ID , "\nAge: ", AGE ,
"\nPoints: ", RAVLT_RETRO_INTERFERENCE,
"\nZ-Score: ", RAVLT_RETRO_INTERFERENCE_Z, sep="")) %>%
ggplot(aes(x = AGE, y = RAVLT_RETRO_INTERFERENCE_Z, fill= GROUP, stroke = 0,
size = AGE, shape = EDU_LEVEL , text = text)) +
geom_point(alpha = 0.7) +
scale_fill_manual(values = coresRAVLT) +
scale_size(range = c(2, 5)) +
scale_x_continuous(name = "Age", limits = c(10, 52), breaks = seq(10, 50, by = 10)) +
scale_y_continuous(name = "Z Score", limits = c(-3, 3), breaks = seq(-3, 3)) +
geom_hline(yintercept = -3:3, color = "black", alpha = 0.1) +
geom_hline(yintercept = 0, color = "red", alpha = 0.3, linetype = "") +
labs(y = "Y", title = "Z Score RAVLT Retroative Interference", shape= "", size = "") +
theme_classic() +
theme(
text = element_text(family = "Arial Narrow", size = 11.5),
plot.title = element_text(size = 12, face = "bold"),
plot.subtitle = element_text(size = 12),
strip.text = element_text(size = 12),
plot.caption = element_text(size = 9, face = "italic"),
axis.title = element_text(size = 10),
legend.position = "",
legend.text = element_text(size = 5)
)
#p22
pp22 <- ggplotly(p22, tooltip="text")
pp22
NA
NA
LS0tDQp0aXRsZTogIlIgTm90ZWJvb2siDQpvdXRwdXQ6IGh0bWxfbm90ZWJvb2sNCi0tLQ0KDQpgYGB7ciB3YXJuaW5nID0gRiwgbWVzc2FnZSA9IEYgfQ0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGd0RXh0cmFzKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQoNCnNldHdkKCJDOi9Vc2Vycy9mZWxpcC9EZXNrdG9wL1IvM19hbmFsaXNlIikNCg0KZGF0YSA8LSByZWFkeGw6OnJlYWRfeGxzeCAoIkJQQXNfRkRUc18gUkFWTFRzX0VzY29yZVoueGxzeCIsIHNoZWV0ID0gMSkNCg0KZGF0YQ0KDQojZ3RfcGx0X3N1bW1hcnkoZGF0YSkNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgICBCUEEgQU5BTFlTSVMNCg0KDQpzdW1tYXJ5KGRhdGEpDQoNCiN1dGlsczo6VmlldyhkYXRhKQ0KDQoNCnAxIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsRURVX0xFVkVMICwgQUdFLCBCUEFfQ09OQ19QT0lOVFMgLCBCUEFfQ09OQ19Fc2NvcmVaICApDQoNCnAyIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsRURVX0xFVkVMLCBBR0UsIEJQQV9ESVZJRF9QT0lOVFMgLCBCUEFfRElWSURfRXNjb3JlWiAgKQ0KDQpwMyA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEVEVV9MRVZFTCAsQUdFLCBCUEFfQUxURVJOX1BPSU5UUyAsIEJQQV9BTFRFUk5fRXNjb3JlWiApDQoNCg0KDQogDQogIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgICBQMQ0KDQoNCmNvcmVzQlBBIDwtIGMoIiMxYTI4ODciLCAiIzc5OWRlNCIpDQoNCg0KDQpwMSA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgQlBBX0NPTkNfUE9JTlRTLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIEJQQV9DT05DX0VzY29yZVosIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBCUEFfQ09OQ19Fc2NvcmVaLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzQlBBKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBCUEEgRm9jdXNlZCBBdHRlbnRpb24iLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KI3AxDQoNCnBwMSA8LSBnZ3Bsb3RseShwMSwgdG9vbHRpcD0idGV4dCIpIA0KDQoNCnBwMQ0KDQoNCiAjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgICAgIFAyDQoNCnAyIDwtIGRhdGEgJT4lDQogIGFycmFuZ2UoSUQpICU+JQ0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgQlBBX0RJVklEX1BPSU5UUywNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBCUEFfRElWSURfRXNjb3JlWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEJQQV9ESVZJRF9Fc2NvcmVaLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzQlBBKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBCUEEgRm9jdXNlZCBBdHRlbnRpb24iLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KDQojcDINCg0KcHAyIDwtIGdncGxvdGx5KHAyLCB0b29sdGlwPSJ0ZXh0IikNCiANCg0KcHAyIA0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgIFAzDQoNCnAzIDwtIGRhdGEgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgQlBBX0FMVEVSTl9QT0lOVFMsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgQlBBX0FMVEVSTl9Fc2NvcmVaLCBzZXA9IiIpKSAlPiUNCiAgDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEJQQV9BTFRFUk5fRXNjb3JlWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0JQQSkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgQlBBIEZvY3VzZWQgQXR0ZW50aW9uIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogIA0KDQojcDMNCg0KcHAzIDwtICBnZ3Bsb3RseShwMywgdG9vbHRpcD0idGV4dCIpDQoNCg0KDQpwcDMNCg0KDQoNCg0KYGBgIA0KDQoNCmBgYHtyfQ0KDQoNCmxpYnJhcnkodGliYmxlKQ0KbGlicmFyeShyZWFkeGwpDQpsaWJyYXJ5KGRwbHlyKQ0KbGlicmFyeShndEV4dHJhcykNCmxpYnJhcnkoZ2dwbG90MikNCmxpYnJhcnkocGxvdGx5KQ0KbGlicmFyeSh2aXJpZGlzKQ0KbGlicmFyeShocmJydGhlbWVzKQ0KDQpzZXR3ZCgiQzovVXNlcnMvZmVsaXAvRGVza3RvcC9SLzNfYW5hbGlzZSIpDQoNCmRhdGEgPC0gcmVhZHhsOjpyZWFkX3hsc3ggKCJCUEFzX0ZEVHNfIFJBVkxUc19Fc2NvcmVaLnhsc3giLCBzaGVldCA9IDIpDQoNCmRhdGENCg0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgICAgIEZEVHMgQU5BTFlTSVMNCg0KDQoNCnA0IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBGRFRfUkVBRElOR19USU1FICwgRkRUX1JFQURJTkdfVElNRV9aICApDQoNCnA1IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBGRFRfQ09VTlRJTkdfVElNRSAsIEZEVF9DT1VOVElOR19USU1FX1ogICkNCg0KcDYgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIEZEVF9DSE9PU0lOR19USU1FICwgRkRUX0NIT09TSU5HX1RJTUVfWiApDQoNCnA3IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBGRFRfQ0hBTkdJTkdfVElNRSAsIEZEVF9DSEFOR0lOR19USU1FX1ogKQ0KDQpwOCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgRkRUX0lOSElCSVRJT04gLCBGRFRfSU5ISUJJVElPTl9aICkNCg0KcDkgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIEZEVF9GTEVYSUJJTElUWSAsIEZEVF9GTEVYSUJJTElUWV9aICkNCg0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQNA0KDQoNCmNvcmVzRkRUIDwtIGMoIiNmMTk0OGEiLCAiI2FiZWJjNiIpDQoNCg0KDQpwNCA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgRkRUX1JFQURJTkdfVElNRSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfUkVBRElOR19USU1FX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBGRFRfUkVBRElOR19USU1FX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNGRFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIEZEVCBSZWFkaW5nIFRpbWUiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KI3A0DQoNCnBwNCA8LSBnZ3Bsb3RseShwNCwgdG9vbHRpcD0idGV4dCIpIA0KDQoNCnBwNA0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIFA1DQoNCnA1IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBGRFRfQ09VTlRJTkdfVElNRSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfQ09VTlRJTkdfVElNRV9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gRkRUX0NPVU5USU5HX1RJTUVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0ZEVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgRkRUIENvdW50aW5nIFRpbWUiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KI3A1DQoNCnBwNSA8LSBnZ3Bsb3RseShwNSwgdG9vbHRpcD0idGV4dCIpIA0KDQoNCnBwNQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgUDYNCg0KDQpwNiA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgRkRUX0NIT09TSU5HX1RJTUUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX0NIT09TSU5HX1RJTUVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9DSE9PU0lOR19USU1FX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNGRFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIEZEVCBDaG9zc2luZyBUaW1lIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwNg0KDQpwcDYgPC0gZ2dwbG90bHkocDYsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDYNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIFA3DQoNCg0KcDc8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgRkRUX0NIQU5HSU5HX1RJTUUsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgRkRUX0NIQU5HSU5HX1RJTUVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9DSEFOR0lOR19USU1FX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNGRFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIEZEVCBDaGFuZ2luZyBUaW1lIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwNw0KDQpwcDcgPC0gZ2dwbG90bHkocDcsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDcNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgUDgNCg0KDQpwODwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBGRFRfSU5ISUJJVElPTiwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfSU5ISUJJVElPTl9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gRkRUX0lOSElCSVRJT05fWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc0ZEVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgRkRUIEluYml0aW9uIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwOA0KDQpwcDggPC0gZ2dwbG90bHkocDgsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDgNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgIFA5DQoNCnA5PC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIEZEVF9GTEVYSUJJTElUWSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBGRFRfRkxFWElCSUxJVFlfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IEZEVF9GTEVYSUJJTElUWV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzRkRUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBGRFQgRmxleGliaWxpdHkiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KI3A5DQoNCnBwOSA8LSBnZ3Bsb3RseShwOSwgdG9vbHRpcD0idGV4dCIpIA0KDQoNCnBwOQ0KYGBgIA0KDQoNCmBgYHtyfQ0KbGlicmFyeSh0aWJibGUpDQpsaWJyYXJ5KHJlYWR4bCkNCmxpYnJhcnkoZHBseXIpDQpsaWJyYXJ5KGd0RXh0cmFzKQ0KbGlicmFyeShnZ3Bsb3QyKQ0KbGlicmFyeShwbG90bHkpDQpsaWJyYXJ5KHZpcmlkaXMpDQpsaWJyYXJ5KGhyYnJ0aGVtZXMpDQoNCnNldHdkKCJDOi9Vc2Vycy9mZWxpcC9EZXNrdG9wL1IvM19hbmFsaXNlIikNCg0KZGF0YSA8LSByZWFkeGw6OnJlYWRfeGxzeCAoIkJQQXNfRkRUc18gUkFWTFRzX0VzY29yZVoueGxzeCIsIHNoZWV0ID0gMykNCg0KZGF0YQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICAgICBSQVZMVHMgQU5BTFlTSVMNCg0KDQoNCnAxMCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTEgLCBSQVZMVF9BMV9aICApDQoNCnAxMSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTIgLCBSQVZMVF9BMl9aICApDQoNCnAxMiA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQTMgLCBSQVZMVF9BM19aICkNCg0KcDEzIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9BNCAsIFJBVkxUX0E0X1ogKQ0KDQpwMTQgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX0E1ICwgUkFWTFRfQTVfWiApDQoNCnAxNSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfQjEgLCBSQVZMVF9CMV9aICkNCg0KcDE2IDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9BNiAsIFJBVkxUX0E2X1ogKQ0KDQpwMTcgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX0E3ICwgUkFWTFRfQTdfWiApDQoNCnAxOCA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfVE9UQUxTQ09SRSAsIFJBVkxUX1RPVEFMU0NPUkVfWiApDQoNCnAxOSA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfUkVDICwgUkFWTFRfUkVDX1ogKQ0KDQpwMjAgPC0gZGF0YSAlPiUgIHNlbGVjdChJRCxFRFVfTEVWRUwgLEdST1VQICxBR0UsIFJBVkxUX1JFVEVOVElPTiAsIFJBVkxUX1JFVEVOVElPTl9aICkNCg0KcDIxIDwtIGRhdGEgJT4lICBzZWxlY3QoSUQsRURVX0xFVkVMICxHUk9VUCAsQUdFLCBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UgLCBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWiApDQoNCnAyMiA8LSBkYXRhICU+JSAgc2VsZWN0KElELEVEVV9MRVZFTCAsR1JPVVAgLEFHRSwgUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFICwgUkFWTFRfUkVUUk9fSU5URVJGRVJFTkNFX1ogKQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgUDEwDQoNCg0KY29yZXNSQVZMVDwtIGMoIiNlNTk4NjYiLCAiI2IyYmFiYiIpDQoNCg0KDQpwMTAgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0ExLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0ExX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9BMV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEExIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwMTANCg0KcHAxMCA8LSBnZ3Bsb3RseShwMTAsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDEwDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgUDExDQoNCg0KcDExIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9BMiwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9BMl9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfQTJfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBBMiIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQojcDExDQoNCnBwMTEgPC0gZ2dwbG90bHkocDExLCB0b29sdGlwPSJ0ZXh0IikgDQoNCg0KcHAxMQ0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQMTINCg0KDQpwMTIgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0EzLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0EzX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9BM19aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEEzIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwMTINCg0KcHAxMiA8LSBnZ3Bsb3RseShwMTIsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDEyDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQMTMNCg0KDQpwMTMgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0E0LA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0E0X1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9BNF9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEE0Iiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwMTMNCg0KcHAxMyA8LSBnZ3Bsb3RseShwMTMsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDEzDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQMTQNCg0KDQpwMTQgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0E1LA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0E1X1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9BNV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEE0Iiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwMTQNCg0KcHAxNCA8LSBnZ3Bsb3RseShwMTQsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDE0DQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQMTUNCg0KDQpwMTUgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX0IxLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX0IxX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9CMV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIEIxIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwMTUNCg0KcHAxNSA8LSBnZ3Bsb3RseShwMTUsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDE1DQoNCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIFAxNg0KDQoNCnAxNiA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTYsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTZfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0E2X1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgQTYiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KI3AxNg0KDQpwcDE2IDwtIGdncGxvdGx5KHAxNiwgdG9vbHRpcD0idGV4dCIpIA0KDQoNCnBwMTYNCg0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgUDE3DQoNCnAxNyA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfQTcsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfQTdfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX0E3X1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgQTciLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KI3AxNw0KDQpwcDE3IDwtIGdncGxvdGx5KHAxNywgdG9vbHRpcD0idGV4dCIpIA0KDQoNCnBwMTcNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQMTgNCg0KcDE4IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9UT1RBTFNDT1JFLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX1RPVEFMU0NPUkVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX1RPVEFMU0NPUkVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBUb3RhbCBTY29yZSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQojcDE4DQoNCnBwMTggPC0gZ2dwbG90bHkocDE4LCB0b29sdGlwPSJ0ZXh0IikgDQoNCg0KcHAxOA0KDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQMTkNCg0KcDE5IDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9UT1RBTFNDT1JFLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX1RPVEFMU0NPUkVfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX1RPVEFMU0NPUkVfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBUb3RhbCBTY29yZSIsIHNoYXBlPSAiIiwgc2l6ZSA9ICIiKSArDQogIHRoZW1lX2NsYXNzaWMoKSArDQogIA0KICAgIHRoZW1lKA0KICAgICAgdGV4dCA9IGVsZW1lbnRfdGV4dChmYW1pbHkgPSAiQXJpYWwgTmFycm93Iiwgc2l6ZSA9IDExLjUpLA0KICAgIHBsb3QudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyLCBmYWNlID0gImJvbGQiKSwNCiAgICBwbG90LnN1YnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgc3RyaXAudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHBsb3QuY2FwdGlvbiA9IGVsZW1lbnRfdGV4dChzaXplID0gOSwgZmFjZSA9ICJpdGFsaWMiKSwNCiAgICBheGlzLnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMCksDQogICAgbGVnZW5kLnBvc2l0aW9uID0gIiIsDQogICAgbGVnZW5kLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDUpDQogICAgKQ0KICAgIA0KDQojcDE5DQoNCnBwMTkgPC0gZ2dwbG90bHkocDE5LCB0b29sdGlwPSJ0ZXh0IikgDQoNCg0KcHAxOQ0KDQoNCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyAgUDIwDQoNCnAyMCA8LSBkYXRhICU+JSANCiAgYXJyYW5nZShJRCkgJT4lIA0KICBtdXRhdGUodGV4dCA9IHBhc3RlKCJJZGVudGlmaWNhdGlvbjogIiwgSUQgLCAiXG5BZ2U6ICIsIEFHRSAsIA0KICAgICAgICAgICAgICAgICAgICAgICJcblBvaW50czogIiwgUkFWTFRfUkVURU5USU9OLA0KICAgICAgICAgICAgICAgICAgICAgICJcblotU2NvcmU6ICIsIFJBVkxUX1JFVEVOVElPTl9aLCBzZXA9IiIpKSAlPiUNCiAgZ2dwbG90KGFlcyh4ID0gQUdFLCB5ID0gUkFWTFRfUkVURU5USU9OX1osIGZpbGw9IEdST1VQLCBzdHJva2UgPSAwLA0KICAgICAgICAgICAgIHNpemUgPSBBR0UsIHNoYXBlID0gRURVX0xFVkVMICwgdGV4dCA9IHRleHQpKSArDQogIGdlb21fcG9pbnQoYWxwaGEgPSAwLjcpICsNCiAgc2NhbGVfZmlsbF9tYW51YWwodmFsdWVzID0gY29yZXNSQVZMVCkgKw0KICBzY2FsZV9zaXplKHJhbmdlID0gYygyLCA1KSkgKw0KICBzY2FsZV94X2NvbnRpbnVvdXMobmFtZSA9ICJBZ2UiLCBsaW1pdHMgPSBjKDEwLCA1MiksIGJyZWFrcyA9IHNlcSgxMCwgNTAsIGJ5ID0gMTApKSArDQogIHNjYWxlX3lfY29udGludW91cyhuYW1lID0gIlogU2NvcmUiLCBsaW1pdHMgPSBjKC0zLCAzKSwgYnJlYWtzID0gc2VxKC0zLCAzKSkgKw0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAtMzozLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4xKSArIA0KICBnZW9tX2hsaW5lKHlpbnRlcmNlcHQgPSAwLCBjb2xvciA9ICJyZWQiLCBhbHBoYSA9IDAuMywgbGluZXR5cGUgPSAiIikgKw0KICBsYWJzKHkgPSAiWSIsIHRpdGxlID0gIlogU2NvcmUgUkFWTFQgUmV0ZW50aW9uIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwMjANCg0KcHAyMCA8LSBnZ3Bsb3RseShwMjAsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDIwDQoNCg0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjICBQMjENCg0KcDIxIDwtIGRhdGEgJT4lIA0KICBhcnJhbmdlKElEKSAlPiUgDQogIG11dGF0ZSh0ZXh0ID0gcGFzdGUoIklkZW50aWZpY2F0aW9uOiAiLCBJRCAsICJcbkFnZTogIiwgQUdFICwgDQogICAgICAgICAgICAgICAgICAgICAgIlxuUG9pbnRzOiAiLCBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0UsDQogICAgICAgICAgICAgICAgICAgICAgIlxuWi1TY29yZTogIiwgUkFWTFRfUFJPQVRfSU5URVJGRVJFTkNFX1osIHNlcD0iIikpICU+JQ0KICBnZ3Bsb3QoYWVzKHggPSBBR0UsIHkgPSBSQVZMVF9QUk9BVF9JTlRFUkZFUkVOQ0VfWiwgZmlsbD0gR1JPVVAsIHN0cm9rZSA9IDAsDQogICAgICAgICAgICAgc2l6ZSA9IEFHRSwgc2hhcGUgPSBFRFVfTEVWRUwgLCB0ZXh0ID0gdGV4dCkpICsNCiAgZ2VvbV9wb2ludChhbHBoYSA9IDAuNykgKw0KICBzY2FsZV9maWxsX21hbnVhbCh2YWx1ZXMgPSBjb3Jlc1JBVkxUKSArDQogIHNjYWxlX3NpemUocmFuZ2UgPSBjKDIsIDUpKSArDQogIHNjYWxlX3hfY29udGludW91cyhuYW1lID0gIkFnZSIsIGxpbWl0cyA9IGMoMTAsIDUyKSwgYnJlYWtzID0gc2VxKDEwLCA1MCwgYnkgPSAxMCkpICsNCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWUgPSAiWiBTY29yZSIsIGxpbWl0cyA9IGMoLTMsIDMpLCBicmVha3MgPSBzZXEoLTMsIDMpKSArDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IC0zOjMsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjEpICsgDQogIGdlb21faGxpbmUoeWludGVyY2VwdCA9IDAsIGNvbG9yID0gInJlZCIsIGFscGhhID0gMC4zLCBsaW5ldHlwZSA9ICIiKSArDQogIGxhYnMoeSA9ICJZIiwgdGl0bGUgPSAiWiBTY29yZSBSQVZMVCBQcm9hdGl2ZSBJbnRlcmZlcmVuY2UiLCBzaGFwZT0gIiIsIHNpemUgPSAiIikgKw0KICB0aGVtZV9jbGFzc2ljKCkgKw0KICANCiAgICB0aGVtZSgNCiAgICAgIHRleHQgPSBlbGVtZW50X3RleHQoZmFtaWx5ID0gIkFyaWFsIE5hcnJvdyIsIHNpemUgPSAxMS41KSwNCiAgICBwbG90LnRpdGxlID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiwgZmFjZSA9ICJib2xkIiksDQogICAgcGxvdC5zdWJ0aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIpLA0KICAgIHN0cmlwLnRleHQgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBwbG90LmNhcHRpb24gPSBlbGVtZW50X3RleHQoc2l6ZSA9IDksIGZhY2UgPSAiaXRhbGljIiksDQogICAgYXhpcy50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTApLA0KICAgIGxlZ2VuZC5wb3NpdGlvbiA9ICIiLA0KICAgIGxlZ2VuZC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSA1KQ0KICAgICkNCiAgICANCg0KI3AyMQ0KDQpwcDIxIDwtIGdncGxvdGx5KHAyMSwgdG9vbHRpcD0idGV4dCIpIA0KDQoNCnBwMjENCg0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMgIFAyMg0KDQpwMjIgPC0gZGF0YSAlPiUgDQogIGFycmFuZ2UoSUQpICU+JSANCiAgbXV0YXRlKHRleHQgPSBwYXN0ZSgiSWRlbnRpZmljYXRpb246ICIsIElEICwgIlxuQWdlOiAiLCBBR0UgLCANCiAgICAgICAgICAgICAgICAgICAgICAiXG5Qb2ludHM6ICIsIFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRSwNCiAgICAgICAgICAgICAgICAgICAgICAiXG5aLVNjb3JlOiAiLCBSQVZMVF9SRVRST19JTlRFUkZFUkVOQ0VfWiwgc2VwPSIiKSkgJT4lDQogIGdncGxvdChhZXMoeCA9IEFHRSwgeSA9IFJBVkxUX1JFVFJPX0lOVEVSRkVSRU5DRV9aLCBmaWxsPSBHUk9VUCwgc3Ryb2tlID0gMCwNCiAgICAgICAgICAgICBzaXplID0gQUdFLCBzaGFwZSA9IEVEVV9MRVZFTCAsIHRleHQgPSB0ZXh0KSkgKw0KICBnZW9tX3BvaW50KGFscGhhID0gMC43KSArDQogIHNjYWxlX2ZpbGxfbWFudWFsKHZhbHVlcyA9IGNvcmVzUkFWTFQpICsNCiAgc2NhbGVfc2l6ZShyYW5nZSA9IGMoMiwgNSkpICsNCiAgc2NhbGVfeF9jb250aW51b3VzKG5hbWUgPSAiQWdlIiwgbGltaXRzID0gYygxMCwgNTIpLCBicmVha3MgPSBzZXEoMTAsIDUwLCBieSA9IDEwKSkgKw0KICBzY2FsZV95X2NvbnRpbnVvdXMobmFtZSA9ICJaIFNjb3JlIiwgbGltaXRzID0gYygtMywgMyksIGJyZWFrcyA9IHNlcSgtMywgMykpICsNCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gLTM6MywgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMSkgKyANCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMCwgY29sb3IgPSAicmVkIiwgYWxwaGEgPSAwLjMsIGxpbmV0eXBlID0gIiIpICsNCiAgbGFicyh5ID0gIlkiLCB0aXRsZSA9ICJaIFNjb3JlIFJBVkxUIFJldHJvYXRpdmUgSW50ZXJmZXJlbmNlIiwgc2hhcGU9ICIiLCBzaXplID0gIiIpICsNCiAgdGhlbWVfY2xhc3NpYygpICsNCiAgDQogICAgdGhlbWUoDQogICAgICB0ZXh0ID0gZWxlbWVudF90ZXh0KGZhbWlseSA9ICJBcmlhbCBOYXJyb3ciLCBzaXplID0gMTEuNSksDQogICAgcGxvdC50aXRsZSA9IGVsZW1lbnRfdGV4dChzaXplID0gMTIsIGZhY2UgPSAiYm9sZCIpLA0KICAgIHBsb3Quc3VidGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEyKSwNCiAgICBzdHJpcC50ZXh0ID0gZWxlbWVudF90ZXh0KHNpemUgPSAxMiksDQogICAgcGxvdC5jYXB0aW9uID0gZWxlbWVudF90ZXh0KHNpemUgPSA5LCBmYWNlID0gIml0YWxpYyIpLA0KICAgIGF4aXMudGl0bGUgPSBlbGVtZW50X3RleHQoc2l6ZSA9IDEwKSwNCiAgICBsZWdlbmQucG9zaXRpb24gPSAiIiwNCiAgICBsZWdlbmQudGV4dCA9IGVsZW1lbnRfdGV4dChzaXplID0gNSkNCiAgICApDQogICAgDQoNCiNwMjINCg0KcHAyMiA8LSBnZ3Bsb3RseShwMjIsIHRvb2x0aXA9InRleHQiKSANCg0KDQpwcDIyDQoNCg0KYGBg